/**
 * table混合
 * */

import bus from '@/mixins/bus';
import _ from 'lodash';

export default {
  data() {
    return {
      editIndex: -1, // 当前编辑的位置
      editValue: '', // 编辑内容
      loading: false, // 是否显示加载动画
      tableDataList: [], // 表格数据
      selectedData: [], // 已选中的数据
      nowPage: 1, // 当前页
      totalNum: 0, // 总条数
      pageShow: 10, // 每页展示条数
      columns: [], // 表格头部信息
      memorySelectedTableList: new Set() // 记录已勾选行的勾选状态
    }
  },
  created() {
    this.pageChangeReset();

    this.getResetData();
  },
  methods: {
    // 切换分页
    handleChangePage(val) {
      this.pageShow = val;
      this.$nextTick(() => {
        this.getData();
      });
    },
    // 过滤条件改变时触发
    handleFilterChange() {
      // 从第一页开始
      this.nowPage = 1;
      this.getData();
    },
    // 选中一项，将数据添加至已选项中
    // selection：已选项数据 row：刚选择的项数据
    handleSelect(selection, row) {
      this.selectedData.push(row);
      this.memorySelectedTableList.add(row.uuid)
    },
    // 取消选中一项，将取消的数据从已选项中删除
    // selection：已选项数据 row：刚选择的项数据
    handleSelectCancel(selection, row) {
      const index = this.selectedData.findIndex(
        item => item.uuid === row.uuid
      );
      this.selectedData.splice(index, 1);
      this.memorySelectedTableList.delete(row.uuid)
    },
    // 当前页全选时，判断已选数据是否存在，不存在则添加
    // selection：已选项数据
    handleSelectAll(selection) {
      selection.forEach(item => {
        if (this.selectedData.findIndex(i => i.uuid === item.uuid) < 0) {
          this.selectedData.push(item);
        }
        this.memorySelectedTableList.add(item.uuid)
      });
    },
    // 取消当前页全选时，将当前页的数据（即 tableDataList）从已选项中删除
    handleSelectAllCancel() {
      this.tableDataList.forEach(item => {
        const index = this.selectedData.findIndex(
          i => i.uuid === item.uuid
        );
        if (index >= 0) {
          this.selectedData.splice(index, 1);
        }
        this.memorySelectedTableList.delete(item.uuid)
      });
    },
    // 清空所有已选项
    handleClearSelect() {
      this.selectedData = [];
    },
    // 批量操作项
    handleClickItem(name) {
      if (name === 'delete') {
        this.selectedData.forEach(item => {
          const index = this.tableDataList.findIndex(
            i => i.uuid === item.uuid
          );
          if (index >= 0) {
            this.tableDataList.splice(index, 1);
          }
        });
        this.selectedData = [];
      }
    },
    // 导出表格
    exportData(type) {
      this.$refs.table.exportCsv({
        filename: this.dynamicData.pageTitle + '列表',
        columns: this.columns.filter((col, index) => col.title !== '操作'),
        data: this.tableDataList.map(k => {
          Object.keys(k).forEach(item => {
            if (item !== 'action' && (typeof k[item] === 'string' || typeof k[item] === 'number')) {
              k[item] = '\t' + k[item]
            }
          })
          return k;
        })
      });
    },
    // 清空基础数据
    pageChangeReset() {
      this.basePath = this.dynamicData.basePath; // 拼接基础路径
      // 表格头部信息
      if (this.dynamicData.columns) {
        this.$set(this.$data, 'columns', JSON.parse(JSON.stringify(this.dynamicData.columns)));
      }
    },
    getResetData() {
      let that = this;
      bus.$on('bus-reset', function (val) {
        that.nowPage = 1;
      })
    }
  },
  watch: {
    '$route': 'pageChangeReset'
  }
}
